#ifndef CAR_H
#define CAR_H
#include <string>
#include <vector>
#include "student.h"

struct Tire {
    std::string type; // 公路轮、麦克纳姆轮
    std::string size; // 175mm
};

struct Chassis {
    std::string id; // dp打头的8位数字+字母
    std::string model = "SCOUT MINI";
    std::string wheelbase = "451mm";
    std::string track = "490mm";
    std::string min_clearance = "115mm";
    std::string min_turn_radius = "0m";
    std::string drive_type = "四轮四驱";
    std::string max_range = "10KM";
    std::vector<Tire> tires;
};

struct AGXKit {
    std::string model = "AGX Xavier";
    std::string ai = "32 TOPS";
    int cuda_cores = 512;
    int tensor_cores = 64;
    std::string vram = "32G";
    std::string storage = "32G";
};

struct Camera {
    std::string model = "RealSense D435i";
    std::string camera = "D430";
    std::string rgb_resolution = "1920*1080";
    int rgb_fps = 30;
    std::string fov = "87*58";
    int depth_fps = 90;
};

struct Lidar {
    std::string model = "RS-Helios-16p";
    int channels = 16;
    std::string range = "100m";
    std::string power = "8W";
};

struct Gyroscope {
    std::string model = "CH110";
    std::string manufacturer = "NXP";
};

struct LCD {
    std::string size = "11.6";
    std::string model = "super";
};

struct Battery {
    std::string param = "24V/15Ah";
    std::string output = "24V";
    std::string charge_time = "2H";
};

class Car {
public:
    std::string id; // cqusn打头的16位数字+字母
    Chassis chassis;
    AGXKit agx;
    Camera camera;
    Lidar lidar;
    Gyroscope gyro;
    LCD lcd;
    Battery battery;
    Student assignedStudent;
    Car();
    void input(bool debug, int index);
    void inputBasicInfo(int index, bool isDebug = false);
};

#endif // CAR_H
